import { interval, concatMap, from, take } from "rxjs";

/* 
from(1)
from([1, 2, 3])
from(Promise.resolve) */
//1 0 3
//2 1 2
//3 2 1
const source$ = interval(1000)
  .pipe(take(3))
  .pipe(
    //可以支持异步，可以支持Promise
    // concatMap是一种内置的操作符，对比 switcheMap,上游所有的 Observable, 都会保留，
    // 对比 mergeMap,上游所有的 Observable, 上游所有的 Observable ，即使执行完的时间不一样，但打印顺序按照Observable产生顺序
    concatMap((val) =>
      from(
        new Promise((resolve) => {
          let delay = 0;
          if (val === 0) delay = 3;
          if (val === 1) delay = 2;
          if (val === 3) delay = 1;
          setTimeout(() => resolve(val), 1000 * delay);
        })
      )
    )
  );
source$.subscribe(console.log);

/**
1
0
2
 */
